Some operating systems use a registry to store system settings, user settings, operating system options, as well as other information. The registry is a database, in a form of a hierarchically-structured data store, which may include information pertaining to hardware, operating system software, application software, and settings per user.
The registry may include keys and values. Registry keys are analogous to folders or directories and values are analogous to files. Each registry key may include one or more other registry keys (subkeys) and/or one or more values. For example, a Windows operating system, available from Microsoft Corporation of Redmond, Wash., may have a registry key path of “HKEY_LOCAL_MACHINE\Software\Microsoft\Windows”, which refers to a key “Windows”, which is a subkey of a key “Microsoft”, which is a subkey of a key “Software”, which is a subkey of a key “HKEY_LOCAL_MACHINE”. A registry value may have a name and data associated with the name.
Software applications may expect installation metadata, such as values (e.g., registry files) or registry entries to be in particular locations. If the registry files or registry entries are not in the particular locations, then a software application may not function correctly.
Some operating systems may be 32-bit operating systems and other operating systems may be 64-bit operating systems. Typically, a 32-bit application may execute on a processing device running a 32-bit operating system and a 64-bit application may execute a processing device running a 64-bit operating system.
A virtual application may be an application packaged to execute in a virtual environment. For example, a 32-bit virtual application may execute on a subsystem for executing 32-bit virtual applications. The subsystem may be included within a 64-bit operating system running on a processing device. One example of such a subsystem is WOW64, which is a subsystem of a 64-bit Windows operating system. Because 32-bit applications and 64-bit applications may coexist on one processing device, use of a particular registry key path by a 32-bit application and a 64-bit application on one processing device may cause one or both of the 32-bit application and the 64-bit application to function incorrectly.
In order to solve this problem, 32-bit applications packaged to execute on a processing device running a 64-bit operating system may refer to one or more particular registry key paths that are different than corresponding registry key paths used by 64-bit applications. For example, a 64-bit application packaged to execute on a processing device running a 64-bit operating system and a 32-bit application packaged to execute on a processing device running a 32-bit operating system may refer to a registry key path of “Registry\HKLM\Software\Contoso”. However, a 32-bit virtual application packaged to execute on a processing device running a 64-bit operating system, with a subsystem for executing 32-bit applications, may be packaged such that the 32-bit virtual application refers to a modified version of the above-mentioned registry key path, such as, for example, “Registry\HKLM\Software\Wow6432Node\Contoso” or other registry key path.
Because one or more modified registry key paths may be used by a 32-bit virtual application when executing on a processing device having a 64-bit operating system, for the 32-bit virtual application to function properly on the processing device, the 32-bit virtual application may be packaged specifically, as a virtual application, for execution on the processing device having the 64-bit operating system. When the 32-bit virtual application is to be executed on a processing device having another operating system, such as a 32 bit operating system, the 32-bit virtual application may be packaged specifically for execution on the processing device having the 32-bit operating system (i.e., no registry key paths may be modified).
Enterprises with an existing library of 32-bit applications may repackage each of the 32-bit applications, as virtual applications, for execution on a processing device with a 64-bit operating system if the 32-bit applications are to run properly on the processing device with the 64-bit operating system. If the existing library of 32-bit applications are also to be executed on a second processing device having a new version of a 64-bit operating system, the 32-bit applications may be repackaged as virtual applications to execute on the second processing device having the new version of the 64-bit operating system (i.e., one or more registry key paths may be modified differently than the one or more registry key paths would be modified for execution on a processing device running a different version of the 64-bit operating system).
Maintaining an application that is repackaged multiple times to execute properly as virtual applications in a number of different executing environments on various processing devices may be time consuming and expensive.